package negocio;

import java.io.Serializable;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;

import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

import Enum.EEstadoEntidad;
import beans.EntidadBean;

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Entidad implements Serializable {

	@Id
	@Column
	private String cuil;
	@Column
	private String razonSocial;

	@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
	@JoinColumn(name = "entidad_id")
	@Fetch(value = FetchMode.SUBSELECT)
	@org.hibernate.annotations.Cascade(value = org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
	private Set<CondicionOperacion> condiciones;
	private EEstadoEntidad estado;

	public EEstadoEntidad getEstado() {
		return estado;
	}

	public void setEstado(EEstadoEntidad estado) {
		this.estado = estado;
	}

	public String getCuil() {
		return cuil;
	}

	public void setCuil(String cuil) {
		this.cuil = cuil;
	}

	public String getRazonSocial() {
		return razonSocial;
	}

	public void setRazonSocial(String razonSocial) {
		this.razonSocial = razonSocial;
	}

	public Set<CondicionOperacion> getCondiciones() {
		return condiciones;
	}

	public void setCondiciones(Set<CondicionOperacion> condiciones) {
		this.condiciones = condiciones;
	}

	public Entidad(String cuil, String razonSocial,
			Set<CondicionOperacion> condiciones) {
		super();
		this.cuil = cuil;
		this.razonSocial = razonSocial;
		this.condiciones = condiciones;
	}

	public EntidadBean getBean() {
		EntidadBean e = new EntidadBean();
		e.setCuil(this.getCuil());
		e.setRazonSocial(this.getRazonSocial());
		return e;
	}

	public Entidad() {
		// TODO Auto-generated constructor stub
	}

}